/*
	使用方法
	1.在使用文件夹引入
	import check from '路径'
	2.使用
	check.isEmail('111111111@qq.com')		返回true或者false
*/


export default {

	// 检测密码强度
	checkPwd(str) {
		if (str.length <= 0) {
			alert('密码不得为空')
			return
		} else if (str.length < 6) {
			alert('密码长度不得小于6位')
			return
		} else if (!(/^(?=.*?[0-9])(?=.*?[a-z])[0-9a-z]{6,}$/)) {
			alert('密码必须是字母+数字的组合')
			return
		} else if (/[~!@#$%^&*()_+`\-={}:";'<>?,.\/]/.test(str)) {
			alert('密码不能有特殊字符')
			return
		}
	},

	// 邮箱
	isEmail(s) {
		return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
	},

	// 手机号码
	isMobile(s) {
		return /^1[0-9]{10}$/.test(s)
	},

	// 电话号码
	isPhone(s) {
		return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
	},
	
	// 简单身份证验证
	idCard(cId){
		return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(cId)
	},

	// 严格的身份证校验
	isCardID(sId) {
		if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
			console.log('你输入的身份证长度或格式错误')
			return false
		}
		//身份证城市
		const aCity = {
			11: "北京",
			12: "天津",
			13: "河北",
			14: "山西",
			15: "内蒙古",
			21: "辽宁",
			22: "吉林",
			23: "黑龙江",
			31: "上海",
			32: "江苏",
			33: "浙江",
			34: "安徽",
			35: "福建",
			36: "江西",
			37: "山东",
			41: "河南",
			42: "湖北",
			43: "湖南",
			44: "广东",
			45: "广西",
			46: "海南",
			50: "重庆",
			51: "四川",
			52: "贵州",
			53: "云南",
			54: "西藏",
			61: "陕西",
			62: "甘肃",
			63: "青海",
			64: "宁夏",
			65: "新疆",
			71: "台湾",
			81: "香港",
			82: "澳门",
			91: "国外"
		};
		if (!aCity[parseInt(sId.substr(0, 2))]) {
			console.log('你的身份证地区非法')
			return false
		}

		// 出生日期验证
		const sBirthday = (sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2))).replace(/-/g,
				"/"),
			d = new Date(sBirthday)
		if (sBirthday != (d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate())) {
			console.log('身份证上的出生日期非法')
			return false
		}

		// 身份证号码校验
		const sum = 0,
			weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
			codes = "10X98765432"
		for (let i = 0; i < sId.length - 1; i++) {
			sum += sId[i] * weights[i];
		}
		const last = codes[sum % 11]; //计算出来的最后一位身份证号码
		if (sId[sId.length - 1] != last) {
			console.log('你输入的身份证号非法')
			return false
		}
		return true
	},

	// 是否url地址
	isURL(s) {
		return /^http[s]?:\/\/.*/.test(s)
	},

	// 是否字符串
	isString(o) {
		return Object.prototype.toString.call(o).slice(8, -1) === 'String'
	},

	// 是否数字
	isNumber(o) {
		return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
	},

	// 是否boolean
	isBoolean(o) {
		return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
	},

	// 是否函数
	isFunction(o) {
		return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
	},

	// 是否为null
	isNull(o) {
		return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
	},

	// 是否undefined
	isUndefined(o) {
		return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
	},

	// 是否对象
	isObj(o) {
		return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
	},

	// 是否数组
	isArray(o) {
		return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
	},

	// 是否是移动端
	isDeviceMobile() {
		return /android|webos|iphone|ipod|balckberry/i.test(ua)
	},

	// 是否ios
	isIos() {
		var u = navigator.userAgent;
		if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) { //安卓手机
			return false
		} else if (u.indexOf('iPhone') > -1) { //苹果手机
			return true
		} else if (u.indexOf('iPad') > -1) { //iPad
			return false
		} else if (u.indexOf('Windows Phone') > -1) { //winphone手机
			return false
		} else {
			return false
		}
	},

	//是否为PC端
	isPC() {
		var userAgentInfo = navigator.userAgent;
		var Agents = ["Android", "iPhone",
			"SymbianOS", "Windows Phone",
			"iPad", "iPod"
		];
		var flag = true;
		for (var v = 0; v < Agents.length; v++) {
			if (userAgentInfo.indexOf(Agents[v]) > 0) {
				flag = false;
				break;
			}
		}
		return flag;
	},



	// 获取url参数
	getQueryString(name) {
		const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
		const search = window.location.search.split('?')[1] || '';
		const r = search.match(reg) || [];
		return r[2];
	},

	// 滚动到顶部
	scrollToTop() {
		const c = document.documentElement.scrollTop || document.body.scrollTop;
		if (c > 0) {
			window.requestAnimationFrame(scrollToTop);
			window.scrollTo(0, c - c / 8);
		}
	},



	// 随机数范围
	random(min, max) {
		if (arguments.length === 2) {
			return Math.floor(min + Math.random() * ((max + 1) - min))
		} else {
			return null;
		}
	},

	// 判断一个元素是否在数组中
	contains(arr, val) {
		return arr.indexOf(val) != -1 ? true : false;
	},

	// 数组排序，{type} 1：从小到大 2：从大到小 3：随机
	sort(arr, type = 1) {
		return arr.sort((a, b) => {
			switch (type) {
				case 1:
					return a - b;
				case 2:
					return b - a;
				case 3:
					return Math.random() - 0.5;
				default:
					return arr;
			}
		})
	},

	// 去重
	unique(arr) {
		if (Array.hasOwnProperty('from')) {
			return Array.from(new Set(arr));
		} else {
			var n = {},
				r = [];
			for (var i = 0; i < arr.length; i++) {
				if (!n[arr[i]]) {
					n[arr[i]] = true;
					r.push(arr[i]);
				}
			}
			return r;
		}
	},

	// 删除其中一个元素
	remove(arr, ele) {
		var index = arr.indexOf(ele);
		if (index > -1) {
			arr.splice(index, 1);
		}
		return arr;
	},

	// 最大值
	max(arr) {
		return Math.max.apply(null, arr);
	},

	// 最小值
	min(arr) {
		return Math.min.apply(null, arr);
	},

	// 求和
	sum(arr) {
		return arr.reduce((pre, cur) => {
			return pre + cur
		})
	},

	// 平均值
	average(arr) {
		return this.sum(arr) / arr.length
	},

	// 去除空格,type: 1-所有空格 2-前后空格 3-前空格 4-后空格
	trim(str, type) {
		type = type || 1
		switch (type) {
			case 1:
				return str.replace(/\s+/g, "");
			case 2:
				return str.replace(/(^\s*)|(\s*$)/g, "");
			case 3:
				return str.replace(/(^\s*)/g, "");
			case 4:
				return str.replace(/(\s*$)/g, "");
			default:
				return str;
		}
	}
}
